Most modern computer systems typically employ print drivers to moderate communications between application programs and printers. Each print driver understands a set of specialized, private commands that control the operation of a particular type of printer, as well as a set of generic or public commands that are used to communicate with the application program. Thus, the print driver acts as a translator by converting generic commands received from an application program into specialized commands for its associated printer.
The generic commands of the print driver are typically defined by the operating system. These commands are publicly provided to manufacturers of printers for use in creating print drivers, and also to application developers for use in creating applications compatible with the operating system. The specialized commands are typically developed by the printer manufacturer, and are kept as a trade secret. They are included within the print driver only in binary form, which is incomprehensible to third parties, but which enables the private commands to be exchanged between the print driver and the printer.
One problem with known print drivers is that they are time consuming and costly to develop. Another problem is that the specialized commands are not customizable by third-party vendors and manufacturers because they are only distributed in binary, unrecognizable form. Thus, each time a third-party vendor or manufacturer desires to manufacture a different printing device, it must develop a new print driver, often wasting valuable time and resources.